﻿/**
* Парсер информации из CMS ihousedesign.com
* @author Firsoff Maxim, icq:234859730, firsoff_maxim@mail.ru, tel:+79222345364
* @version 0.1/24.06.2008 16:39
*/

package ru.vega_int.firsoff.as3.cms
{
	import flash.errors.IllegalOperationError;
	public class InfoParcerIhousedesignCMS 
	{
		//	PROPERTIES
		//	public
		//	private
		protected var _info:XML;
		protected var _sections:Array; /*of SectionInfo*/
		protected var _names:Array;    /*of Strings*/
		protected var _path:String;
		//	const
		//	----------------------------------------------------------------------------------
		
		//	CONSTRUCTOR
		public function InfoParcerIhousedesignCMS(xml:XML, path:String='cms/data/') 
		{
			_info = xml;
			_path = path;
			init(path);
		};
		
		//	METHODS
		//	private
		protected function init(path:String):void
		{
			_sections = new Array();
			_names = new Array();
			for each (var section:XML in _info.elements()) 
			{ 
				var s:SectionInfo = new SectionInfo(section, path);
				_names.push(s.name);
				_sections.push(s);
				//trace(s.name);
			};
		};
		
		
		//	public
		/**
		 * Вернуть секцию по индексу
		 * @param	index	Индекс
		 * @return  объект SectionInfo
		 */
		public function getSectionByIndex(index:int) : SectionInfo
		{
			var s:SectionInfo;
			try 
			{
				s = sections[index];
				
			}
			catch (e:Error)
			{
				throw new IllegalOperationError('index : ' + index + ', is out of bounds');
			};
			return s;
		};
		
		/**
		 * Секция по имени
		 * @param	name	Имя секции
		 * @return	инфо класс секции
		 */
		public function getSectionByName(name:String) : SectionInfo
		{
			var s:SectionInfo;
			var returnSection:SectionInfo;
			for (var i:int = 0; i < _sections.length; i++) 
			{
				s = SectionInfo(_sections[i]);
				//trace(name, s.name)
				if (s.name == name)
				{
					returnSection = s;
					break;
				};
			};
			return returnSection;
		};
		
		/**
		 * Добавление секции в конец списка
		 * @param	s	Секция
		 * @return	Количество секций
		 */
		public function addSection(s:SectionInfo) :int
		{
			_sections.push(s);
			_names.push(s.name);
			return _sections.length;
		};
		
		/**
		 * Добавление секции по индексу
		 * @param	index	место добавления
		 * @return колво секций
		 */
		public function addSectionAt(index:int, value:SectionInfo) : int
		{
			//trace(_sections.length)
			_sections.splice(index + 1, 0, value);
				//trace(_sections.length)
			return _sections.length;
		};
		//	----------------------------------------------------------------------------------
		
		//	GETTERS/SETTERS
		/**
		 * Входной XML документ
		 */
		public function get info():XML { return _info; };
		
		/**
		 * Список секций в виде списка SectionInfo объектов
		 */
		public function get sections():Array { return _sections; };
		
		/**
		 * Список имен секций
		 */
		public function get names():Array 
		{
			_names = new Array();
			for each (var s:SectionInfo in _sections) 
			{ 
				
				_names.push(s.name);
			};
			return _names;
		};
		
		/**
		 * Путь до папок секций
		 */
		public function get path():String { return _path; };
		//	----------------------------------------------------------------------------------
		
		//	HANDLERS
		
		//	----------------------------------------------------------------------------------
	};
};
